// main.go
// =============================================================================
// | 包: main                                                                 |
// | 功能: 应用程序入口点，负责初始化配置和各核心组件                           |
// =============================================================================
package main

import (
	"blog_server/core"   // 核心功能模块 - 包含配置、日志、数据库等初始化功能
	"blog_server/flags"  // 命令行参数解析 - 处理命令行参数和选项
	"blog_server/global" // 全局变量包 - 存储全局配置和共享数据
	"blog_server/router" // 路由模块 - 提供HTTP路由和API接口
)

// =============================================================================
// | 函数: main                                                              |
// | 参数: 无                                                                 |
// | 返回: 无                                                                 |
// | 功能: 应用程序入口点，初始化配置、日志系统并启动应用                       |
// | 说明: 按顺序执行应用程序的初始化和启动流程                                |
// |----------------------------------------------------------------------------|
// | 流程:                                                                     |
// | 1. 解析命令行参数                                                         |
// | 2. 读取配置文件并初始化全局配置                                           |
// | 3. 初始化日志系统                                                         |
// | 4. 初始化数据库连接                                                       |
// | 5. 执行命令行参数指定的操作                                               |
// | 6. 启动Web服务器                                                         |
// =============================================================================
func main() {
	// 解析命令行参数
	// | 读取用户通过命令行传递的参数，如配置文件路径、数据库迁移开关等            |
	flags.Parse()

	// 读取配置文件并初始化全局配置
	// | 从指定的配置文件加载配置信息，并赋值给全局变量                            |
	global.Config = core.ReadConf()

	// 初始化日志系统
	// | 配置日志格式、级别和输出方式，支持控制台和文件双路输出                    |
	core.InitLogrus()

	// 初始化数据库连接
	// | 创建数据库连接，配置读写分离，并赋值给全局变量                            |
	global.DB = core.InitDB()

	// 初始化Redis连接
	// | 创建Redis客户端连接，验证连通性，并赋值给全局变量                         |
	global.Redis = core.InitRedis()

	// 执行命令行参数指定的操作
	// | 根据解析的命令行参数执行相应的操作，如数据库迁移等                        |
	flags.Run()

	// // 记录不同级别的日志示例
	// logrus.Warnf("警告信息")
	// logrus.Debug("调试信息")
	// logrus.Error("错误信息")
	// logrus.Infof("普通信息")

	// 启动Web服务器
	// | 初始化HTTP路由并启动Web服务                                              |
	router.Run()
}
